package com.gg.service.impl;

import com.gg.dao.BookDao;
import com.gg.dao.OrderDao;
import com.gg.dao.OrderItemDao;
import com.gg.dao.impl.BookDaoImpl;
import com.gg.dao.impl.OrderDaoImpl;
import com.gg.dao.impl.OrderItemDaoImpl;
import com.gg.pojo.*;
import com.gg.service.OrderService;

import java.util.Date;
import java.util.List;

public class OrderServiceImpl implements OrderService {
    private OrderDao orderDao = new OrderDaoImpl();
    private OrderItemDao orderItemDao = new OrderItemDaoImpl();
    private BookDao bookDao = new BookDaoImpl();

    /**
     * 购物车生成订单
     * @param cart
     * @param userId
     * @return
     */
    @Override
    public String createOrder(Cart cart, Integer userId) {
        //System.out.println("OrderServiceImpl程序在【"+Thread.currentThread().getName()+"】中");
        //订单号==唯一性
        String orderId = System.currentTimeMillis() + "" + userId;
        //建订单对象
        Order order = new Order(orderId, new Date(), cart.getTotalPrice(), 0, userId);
        orderDao.saveOrder(order);
        //int i = 12 / 0; //异常测试
        //遍历购物车中每个商品项换成为订单中的订单项保存到数据库//存在库存不足还能购买的BUG
        /*for (CartItem cartItem : cart.getItems().values()) {
                // 转换为每一个订单项
                OrderItem orderItem = new OrderItem(null, cartItem.getName(), cartItem.getCount(), cartItem.getPrice(), cartItem.getTotalPrice(), orderId);
                // 保存订单项到数据库
                orderItemDao.saveOderItem(orderItem);

                // 更新库存和销量
                Book book = bookDao.queryBookById(cartItem.getId());
                book.setSales(book.getSales() + cartItem.getCount());
                book.setStock(book.getStock() - cartItem.getCount());
                bookDao.updateBook(book);

            }*/

        //以下可以解决库存不足，还能买的BUG，但是也存在购买成功后首页对应图书的数量不改变的Bug（得重新登录才行）
        for (CartItem cartItem : cart.getItems().values()) {
            //转换为每一个相应订单项
            OrderItem orderItem = new OrderItem(null,cartItem.getName(),cartItem.getCount(),cartItem.getPrice(),cartItem.getTotalPrice(),orderId);
            //查出每个商品项对应的图书信息
            Book book = bookDao.queryBookById(cartItem.getId());
            if (book.getStock() < orderItem.getCount()){
                int i = 12 / 0; //库存不足报异常，跳到友好提示页面error500
            }else {
                //保存订单项到数据库
                orderItemDao.saveOderItem(orderItem);
                //修改销量和库存
                book.setSales( book.getSales() + cartItem.getCount() );
                book.setStock( book.getStock() - cartItem.getCount() );
                //更新保存到数据库
                bookDao.updateBook(book);
                //买完生成订单后，清空购物车
            }
        }
        cart.clear();
        return orderId;
    }

    /**
     * 查询全部订单
     * @return
     */
    @Override
    public List<Order> showAllOrders() {
        return orderDao.queryOrders();
    }

    /**
     * 管理订单点击发货
     * @param orderId
     */
    @Override
    public void sendOrder(String orderId) {
        orderDao.changeOrderStatus(orderId,1);
    }

    /**
     * 管理订单界面管理员查看订单详情
     * @param orderId
     * @return
     */
    @Override
    public List<OrderItem> showOrderDetail(String orderId) {
        return orderItemDao.queryOrderItemsByOrderId(orderId);
    }

    @Override
    public List<Order> showMyOrders(int userId) {
        return orderDao.queryOrdersByUserId(userId);
    }


}
